<?php

if( !defined( 'IN_INU' ) )
{
	return;
}

class FM_LootLogic
{
	/**
	 * 单例模式对象
	 * @var	FM_Notification
	 */
	protected static $singletonObject = null;
	
	/**
	 * C++通知服务客户端
	 * @var	fm_msg
	 */
	protected static $client = null;
	
	/**
	 * 通知系统配置
	 * @var	array
	 */
	protected $config;
	
	/**
	 * 实例化
	 */
	protected function __construct()
	{
		$this->config = & Common::getConfig( 'lootLogicServer' );
		try
		{
			if( class_exists( 'fm_logic' ) && $this->config['host'] && $this->config['port'] )
			{
				self::$client = new fm_logic( $this->config['host'] , $this->config['port'] );
			}
		}
		catch( Exception $ex )
		{
			;
		}
	}
	
	/**
	 * 获取一个Http代理类实例
	 * @return	FM_LootLogic
	 */
	public static function & getInstance()
	{
		if( self::$singletonObject == null )
		{
			self::$singletonObject = new FM_LootLogic();
		}
		
		return self::$singletonObject;
	}
	
	/**
	 * 用户登陆
	 * @param	int $userId	用户ID
	 * @param	int $level	用户等级
	 * @param	int $combatScore	战斗评分
	 * @return	string
	 */
	public function login( $userId , $level , $combatScore , $ext = '{}' )
	{
		if( self::$client )
		{
			return self::$client->login( $userId , $level , $combatScore , $ext );
		}
		return 'old';
	}
	
	/**
	 * 批量添加物品
	 * @param	int $userId	用户ID
	 * @param	int $itemIds	道具列表
	 * @return	boolean
	 */
	public function addItemList( $userId , $itemIds )
	{
		if( self::$client )
		{
			return self::$client->add_item_list( $userId , count( $itemIds ) , $itemIds );
		}
		return true;
	}
	/**
	 * 更新用户属性
	 * @param	int $userId	用户ID
	 * @param	int $level	用户等级
	 * @param	int $combatScore	战斗评分
	 * @return	boolean
	 */
	public function updateUser( $userId , $level , $combatScore , $ext = '{}' )
	{
		if( self::$client )
		{
			return self::$client->update_attribute( $userId , $level , $combatScore , $ext );
		}
		return true;
	}
	
	/**
	 * 更新用户单个物品
	 * @param	int $userId	用户ID
	 * @param	int $itemId	道具ID
	 * @param	boolean $haveItemChanged	道具数量是否发生了拥有状态变更（true => 从拥有0个变成拥有1或多个；false => 从拥有1或多个变成拥有0个）
	 * @return	boolean
	 */
	public function updateItem( $userId , $itemId , $haveItemChanged )
	{
		if( self::$client )
		{
			return self::$client->update_item( $userId , $itemId , $haveItemChanged ? 1 : 0 );
		}
		return true;
	}
	
	/**
	 * 获取可以打劫用户列表
	 * @param	int $userId	用户ID
	 * @param	int $level	用户等级
	 * @param	int $combatScore	战斗评分
	 * @param	int $itemId	道具ID
	 * @return	boolean
	 */
	public function getRecommendLootList( $userId , $level , $combatScore , $items )
	{
		if( self::$client )
		{
			$result = self::$client->get_plunder_list( $userId , $level , $combatScore , count( $items ) , $items );
			if( !$result )
			{
				return array();
			}
			return json_decode( $result , true );
		}
		return true;
	}
	
	/**
	 * 设置打劫成功
	 * @param	int $lootUserId	打劫者的用户ID
	 * @param	int $beLootUserId	被打劫者的用户ID
	 * @param	int $itemId	被打劫的道具ID
	 * @param	boolean $havingItems	被打劫者是否还拥有被打劫的道具（ true => 还拥有被打劫的道具；false => 被打劫的道具被打劫完了）
	 * @return	boolean
	 */
	public function setBeLoot( $lootUserId , $beLootUserId , $itemId , $havingItems )
	{
		if( self::$client )
		{
			return self::$client->plunder_success( $beLootUserId , $lootUserId , $itemId , $havingItems ? 1 : 0 );
		}
		return true;
	}
	/**
	 * 检查是否在线
	 * @param	int $userId	用户ID
	 * @return	boolean
	 */
	public function checkOnline( $userId )
	{
		if( self::$client )
		{
			return self::$client->check_online( $userId );
		}
		return false;
	}
	/**
	 * 移除物品列表
	 * @param	int $userId	用户ID
	 * @param	array $itemList 物品列表
	 * @return	boolean
	 */
	public function deleteItemList( $userId , $itemList  )
	{
		if( self::$client )
		{
			$num = count( $itemList );
			if( $num > 0 )
			{
				return self::$client->delete_item_list( $userId , $num , $itemList );
			}
			else 
			{
				return true;
			}
		}
		return false;
	}
}

?>
